package com.zlx.rulemk.marketing.beans;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @Author: zhanglingxing
 * @CreateTime: 2022-07-07
 * @Description: 规则条件组的分组：一个完整的一组事件的组合【对外可以提供的方式】
 * @Version: 1.0
 *
 * 事件组合体条件封装  类似于： [C !W F G](>=2)  [A.*B.*C]
 *
 * 例如：有多个原子条件
 *  A事件 {p1=v1}{p4=v2}
 *  C事件 {p2=v1}
 *  D事件 {p3=p4,2=v8}
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class EventCombinationCondition {

    /**
     * 组合条件的发生时间区间起始
     */
    private long timeRangeStart;

    /**
     * 组合条件的发生时间区间结束
     */
    private long timeRangeEnd;

    /**
     * 组合发生的最小次数
     */
    private int minLimit;

    /**
     * 组合发生的最大次数
     */
    private int maxLimit;

    /**
     * 组合条件中关心的事件的列表
     *
     * 例如：有多个原子条件
     *  A事件 {p1=v1}{p4=v2}
     *  C事件 {p2=v1}
     *  D事件 {p3=p4,2=v8}
     */
    private List<EventCondition> eventConditionList;
    /**
     * 组合条件未来计算要用的正则匹配表达式
     * ACD事件的组合方式
     */
    private String matchPattern;

    /**
     * 这个字段需要规则web系统进行拼接好对应的查询sql
     * 比如上面的ACD事件，怎么去数据库查询，拼接的sql在Flink运行的时候 可以动态传值进行查询
     */
    private String sqlType;

    /**
     * sql的类型 后期可以扩展 去不同的数据进行查询
     */
    private String querySql;

    /**
     * 条件缓存 ID
     *  相同事件组合，相同查询条件，相同过滤条件，可以共用一个cacheId，起到优化系统的的作用
     */
    private String cacheId;
}
